#!/usr/bin/env python3
import argparse
import re
import os
from pathlib import Path

IMG_TAG_RE = re.compile(r'<img[^>]*\ssrc="([^"]+)"', re.I)
MD_IMG_RE  = re.compile(r'!\[[^\]]*\]\(([^)]+)\)')

def calc_rel(old_md_dir: Path, new_md_dir: Path, raw_path: str) -> str:
    """返回：新 .md 文件→旧图片的纯相对路径"""
    if raw_path.startswith(('http://', 'https://')):
        return raw_path
    # 旧图片绝对路径
    abs_img = (old_md_dir / raw_path).resolve()
    # 用 os.path.relpath 计算相对路径（不要求父子关系）
    rel = os.path.relpath(abs_img, new_md_dir.resolve())
    # 统一用正斜杠
    return rel.replace('\\', '/')

def main():
    parser = argparse.ArgumentParser(description='移动 .md 并仅修正图片相对路径（图片不动）')
    parser.add_argument('md_file', type=Path, help='原 .md 文件')
    parser.add_argument('target_dir', type=Path, help='目标目录（存放移动后的 .md）')
    args = parser.parse_args()

    src_file = args.md_file.resolve()
    tgt_dir  = args.target_dir.resolve()
    if not src_file.is_file():
        parser.error(f'{src_file} 不是文件')
    tgt_dir.mkdir(parents=True, exist_ok=True)

    new_file = tgt_dir / src_file.name
    text = src_file.read_text(encoding='utf-8')

    def repl(match: re.Match) -> str:
        old_path = match.group(1)
        new_path = calc_rel(src_file.parent, tgt_dir, old_path)
        return match.group(0).replace(old_path, new_path)

    text = IMG_TAG_RE.sub(repl, text)
    text = MD_IMG_RE.sub(repl, text)
    new_file.write_text(text, encoding='utf-8')
    src_file.unlink()
    print(f'[SAVE] {new_file}  （图片路径已修正，仍是相对路径）')

if __name__ == '__main__':
    main()